/* -----------------------------------------------------------------------
 *   Copyright (C) 2008 by Denjs
 *   dplsoft@pisem.net
 *   http://qdroid.berlios.de
 * -----------------------------------------------------------------------
 *   This program is free software licensed under GNU GPL License v.2 ; see main.cpp fo details
 *   Эта программа является свободным программным обеспечением; распространяемым под
 *   лицензией GNU General Public License v.2 (УНИВЕРСАЛЬНАЯ ОБЩЕСТВЕННАЯ ЛИЦЕНЗИЯ GNU версия 2.0) 
 * ----------------------------------------------------------------------- */
/*
 * t_FileBot.h
 *
 *  Created on: 21.11.2008
 *      Author: Denjs
 *
 *
 *      ver 2008.11.25
 */

/*

	Бот для операций над файлами

*/
#ifndef t_FileBot_H_
#define t_FileBot_H_

#include "t_AbstractQDroidBot.h"
#include <QTreeWidget>

/*

*/

class t_FileBot : public t_AbstractQDroidBot
{
    Q_OBJECT

    public:
    	t_FileBot(QObject *parent =0);

    	//это (ниже) нужно что бы можно было засунуть t_FileList в контейнер QList
    	// возможно так-же связано с работой QtScript движка - см функции после определения класса
    	// спец. настройки для QtScript (v 2008.11.25)
    	// Шаг 1 из 8
    	t_FileBot(const t_FileBot &other);
    	//это (ниже) нужно что бы можно было засунуть t_FileList в контейнер QList
    	// возможно так-же связано с работой QtScript движка - см функции после определения класса
    	// спец. настройки для QtScript (v 2008.11.25)
    	// Шаг 2 из 8
    	t_FileBot& operator=(const t_FileBot &other);

    	QTreeWidgetItem CoreQTreeWidgetItem;
    public slots:
		QString std_in(QString Message); // needs to be redefined to make real class
		t_FileBot* copy();//костыли в рузультуате того что регистрируем ссылку а не сам тип для движка

		//операции с файлами и каталогами
		bool set_current_dir(QString CurDir);
		bool rename_file(QString Sourse,QString Dest);//переименовать файл или каталог
		bool copy_file(QString Sourse,QString Dest);//скопировать файл или каталог
		int remove_file(QString FilePath,QString Qwestion);//удалить файл или каталог и задать вопрос если указан. на ответ "ДА" производится удаление файла.
		bool make_dir(QString DirPathName);//создать подкаталог в каталоге Path,

                //++2011.06.03
                QString get_path(QString FilePath);//вернуть путь из полного имени файла
                //QString get_extention(QString FilePath);//вернуть расширение имени файла
                QString get_filename(QString FilePath);//вернуть имя файла

/*

		//операции с путями и именами файлов
		bool exists(QString *FilePath); // существует ли файл или директория


		int get_last_path_part(QString *FilePath);//вернуть последнюю часть пути (например имя файла с расширением)
		int remove_last_path_part(QString *FilePath);//удалить последнюю часть пути (получить родительский каталог)

		int match(QString *Filter, QString *FileName ); //удовлетворяет ли имя файла маске поиска

		//обзор файлов и их свойств
		int lookupfiles(QString *FilePath);
				// обозреть файлы в заданном каталоге
				// отдает количество файлов и директорий в каталоге
				// после этого можно получить список файлов по имени.

		QFileInfo get_file_info_at_pos(int position);//вообще QFileInfo надо обернуть что бы поместить его в скриптовую среду... но пока для прикидки пусть будет так..
*/


//		QString toNativeSeparators(QString *pathName);// вернуть путь в сепараторах используемых на даной платформе

    signals:

    protected:

    private:
    	QDir ServQDirObj;
    	QFile ServQFileObj;
};
//нужно чтобы можно было передавать эти элементы как параметры в функции внутри QtScript
// спец. настройки для QtScript (v 2008.11.25)
// Шаг 3 из 8
Q_DECLARE_METATYPE(t_FileBot*);

// спец. настройки для QtScript (v 2008.11.25)
// Шаг 4 из 8
static QScriptValue qdroid_t_FileBot_toScriptValue(QScriptEngine *engine, t_FileBot* const &in)
{ return engine->newQObject(in); }

// спец. настройки для QtScript (v 2008.11.25)
// Шаг 5 из 8
static void qdroid_t_FileBot_fromScriptValue(const QScriptValue &object, t_FileBot* &out)
{ out = qobject_cast<t_FileBot*>(object.toQObject()); }

// спец. настройки для QtScript (v 2008.11.25)
// Шаг 6 из 8
//конструктор для последующего его определения как new в скрипте
static QScriptValue qdroid_t_FileBot_constructor(QScriptContext *QSContext, QScriptEngine *QSEngine)
	{
		//t_BaseBot BaseBot;
		QScriptValue QtSObject;
		QtSObject=QSEngine->newQObject(new t_FileBot()); //
		//qsBaseBot=QSEngine->toScriptValue(BaseBot);
		return QtSObject;
	}

// спец. настройки для QtScript (v 2008.11.25)
// Шаг 7 из 8
// - это qScriptRegisterMetaType регистрация но это нужно сделать в головном классе
// например в глобальной функции "define__qdroid_qtscript_functions()"
//// t_FileList TYPE defenition
//	qScriptRegisterMetaType(_QSEngine, qdroid_t_FileBot_toScriptValue, qdroid_t_FileBot_fromScriptValue);

// спец. настройки для QtScript (v 2008.11.25)
// Шаг 8 из 8
//- определение конструктора в контексте скрипта
//// t_FileList NEW constructor defenition
//	QScriptValue t_FileBot_constr_func = _QSEngine->newFunction(qdroid_t_FileBot_constructor);
//	_QSEngine->globalObject().setProperty("t_FileBot", t_FileBot_constr_func);


//=================================================================

#endif /* t_FileBot_H_ */
